﻿using System;
using Microsoft.EntityFrameworkCore.Migrations;

namespace Volo.Abp.SettingManagement.DemoApp.Migrations;

public partial class init : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "AbpClaimTypes",
            columns: table => new {
                Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                Name = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false),
                Required = table.Column<bool>(type: "bit", nullable: false),
                IsStatic = table.Column<bool>(type: "bit", nullable: false),
                Regex = table.Column<string>(type: "nvarchar(512)", maxLength: 512, nullable: true),
                RegexDescription = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: true),
                Description = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
                ValueType = table.Column<int>(type: "int", nullable: false),
                ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true),
                ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AbpClaimTypes", x => x.Id);
            });

        migrationBuilder.CreateTable(
            name: "AbpLinkUsers",
            columns: table => new {
                Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                SourceUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                SourceTenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                TargetUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                TargetTenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AbpLinkUsers", x => x.Id);
            });

        migrationBuilder.CreateTable(
            name: "AbpOrganizationUnits",
            columns: table => new {
                Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                ParentId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                Code = table.Column<string>(type: "nvarchar(95)", maxLength: 95, nullable: false),
                DisplayName = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
                ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true),
                ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true),
                CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
                CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true),
                LastModifierId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                IsDeleted = table.Column<bool>(type: "bit", nullable: false, defaultValue: false),
                DeleterId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                DeletionTime = table.Column<DateTime>(type: "datetime2", nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AbpOrganizationUnits", x => x.Id);
                table.ForeignKey(
                    name: "FK_AbpOrganizationUnits_AbpOrganizationUnits_ParentId",
                    column: x => x.ParentId,
                    principalTable: "AbpOrganizationUnits",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Restrict);
            });

        migrationBuilder.CreateTable(
            name: "AbpPermissionGrants",
            columns: table => new {
                Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                Name = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
                ProviderName = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
                ProviderKey = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AbpPermissionGrants", x => x.Id);
            });

        migrationBuilder.CreateTable(
            name: "AbpRoles",
            columns: table => new {
                Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                Name = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false),
                NormalizedName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false),
                IsDefault = table.Column<bool>(type: "bit", nullable: false),
                IsStatic = table.Column<bool>(type: "bit", nullable: false),
                IsPublic = table.Column<bool>(type: "bit", nullable: false),
                ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true),
                ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AbpRoles", x => x.Id);
            });

        migrationBuilder.CreateTable(
            name: "AbpSecurityLogs",
            columns: table => new {
                Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                ApplicationName = table.Column<string>(type: "nvarchar(96)", maxLength: 96, nullable: true),
                Identity = table.Column<string>(type: "nvarchar(96)", maxLength: 96, nullable: true),
                Action = table.Column<string>(type: "nvarchar(96)", maxLength: 96, nullable: true),
                UserId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                UserName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
                TenantName = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true),
                ClientId = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true),
                CorrelationId = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true),
                ClientIpAddress = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true),
                BrowserInfo = table.Column<string>(type: "nvarchar(512)", maxLength: 512, nullable: true),
                CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
                ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true),
                ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AbpSecurityLogs", x => x.Id);
            });

        migrationBuilder.CreateTable(
            name: "AbpSettings",
            columns: table => new {
                Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                Name = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
                Value = table.Column<string>(type: "nvarchar(2048)", maxLength: 2048, nullable: false),
                ProviderName = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true),
                ProviderKey = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AbpSettings", x => x.Id);
            });

        migrationBuilder.CreateTable(
            name: "AbpUsers",
            columns: table => new {
                Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                UserName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false),
                NormalizedUserName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false),
                Name = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true),
                Surname = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true),
                Email = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false),
                NormalizedEmail = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false),
                EmailConfirmed = table.Column<bool>(type: "bit", nullable: false, defaultValue: false),
                PasswordHash = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true),
                SecurityStamp = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false),
                IsExternal = table.Column<bool>(type: "bit", nullable: false, defaultValue: false),
                PhoneNumber = table.Column<string>(type: "nvarchar(16)", maxLength: 16, nullable: true),
                PhoneNumberConfirmed = table.Column<bool>(type: "bit", nullable: false, defaultValue: false),
                TwoFactorEnabled = table.Column<bool>(type: "bit", nullable: false, defaultValue: false),
                LockoutEnd = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true),
                LockoutEnabled = table.Column<bool>(type: "bit", nullable: false, defaultValue: false),
                AccessFailedCount = table.Column<int>(type: "int", nullable: false, defaultValue: 0),
                ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true),
                ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true),
                CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
                CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true),
                LastModifierId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                IsDeleted = table.Column<bool>(type: "bit", nullable: false, defaultValue: false),
                DeleterId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                DeletionTime = table.Column<DateTime>(type: "datetime2", nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AbpUsers", x => x.Id);
            });

        migrationBuilder.CreateTable(
            name: "AbpOrganizationUnitRoles",
            columns: table => new {
                RoleId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                OrganizationUnitId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
                CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AbpOrganizationUnitRoles", x => new { x.OrganizationUnitId, x.RoleId });
                table.ForeignKey(
                    name: "FK_AbpOrganizationUnitRoles_AbpOrganizationUnits_OrganizationUnitId",
                    column: x => x.OrganizationUnitId,
                    principalTable: "AbpOrganizationUnits",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Cascade);
                table.ForeignKey(
                    name: "FK_AbpOrganizationUnitRoles_AbpRoles_RoleId",
                    column: x => x.RoleId,
                    principalTable: "AbpRoles",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Cascade);
            });

        migrationBuilder.CreateTable(
            name: "AbpRoleClaims",
            columns: table => new {
                Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                RoleId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                ClaimType = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false),
                ClaimValue = table.Column<string>(type: "nvarchar(1024)", maxLength: 1024, nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AbpRoleClaims", x => x.Id);
                table.ForeignKey(
                    name: "FK_AbpRoleClaims_AbpRoles_RoleId",
                    column: x => x.RoleId,
                    principalTable: "AbpRoles",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Cascade);
            });

        migrationBuilder.CreateTable(
            name: "AbpUserClaims",
            columns: table => new {
                Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                UserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                ClaimType = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false),
                ClaimValue = table.Column<string>(type: "nvarchar(1024)", maxLength: 1024, nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AbpUserClaims", x => x.Id);
                table.ForeignKey(
                    name: "FK_AbpUserClaims_AbpUsers_UserId",
                    column: x => x.UserId,
                    principalTable: "AbpUsers",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Cascade);
            });

        migrationBuilder.CreateTable(
            name: "AbpUserLogins",
            columns: table => new {
                UserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                LoginProvider = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
                TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                ProviderKey = table.Column<string>(type: "nvarchar(196)", maxLength: 196, nullable: false),
                ProviderDisplayName = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AbpUserLogins", x => new { x.UserId, x.LoginProvider });
                table.ForeignKey(
                    name: "FK_AbpUserLogins_AbpUsers_UserId",
                    column: x => x.UserId,
                    principalTable: "AbpUsers",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Cascade);
            });

        migrationBuilder.CreateTable(
            name: "AbpUserOrganizationUnits",
            columns: table => new {
                UserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                OrganizationUnitId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
                CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AbpUserOrganizationUnits", x => new { x.OrganizationUnitId, x.UserId });
                table.ForeignKey(
                    name: "FK_AbpUserOrganizationUnits_AbpOrganizationUnits_OrganizationUnitId",
                    column: x => x.OrganizationUnitId,
                    principalTable: "AbpOrganizationUnits",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Cascade);
                table.ForeignKey(
                    name: "FK_AbpUserOrganizationUnits_AbpUsers_UserId",
                    column: x => x.UserId,
                    principalTable: "AbpUsers",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Cascade);
            });

        migrationBuilder.CreateTable(
            name: "AbpUserRoles",
            columns: table => new {
                UserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                RoleId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AbpUserRoles", x => new { x.UserId, x.RoleId });
                table.ForeignKey(
                    name: "FK_AbpUserRoles_AbpRoles_RoleId",
                    column: x => x.RoleId,
                    principalTable: "AbpRoles",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Cascade);
                table.ForeignKey(
                    name: "FK_AbpUserRoles_AbpUsers_UserId",
                    column: x => x.UserId,
                    principalTable: "AbpUsers",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Cascade);
            });

        migrationBuilder.CreateTable(
            name: "AbpUserTokens",
            columns: table => new {
                UserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
                LoginProvider = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
                Name = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
                TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
                Value = table.Column<string>(type: "nvarchar(max)", nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AbpUserTokens", x => new { x.UserId, x.LoginProvider, x.Name });
                table.ForeignKey(
                    name: "FK_AbpUserTokens_AbpUsers_UserId",
                    column: x => x.UserId,
                    principalTable: "AbpUsers",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Cascade);
            });

        migrationBuilder.CreateIndex(
            name: "IX_AbpLinkUsers_SourceUserId_SourceTenantId_TargetUserId_TargetTenantId",
            table: "AbpLinkUsers",
            columns: new[] { "SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId" },
            unique: true,
            filter: "[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL");

        migrationBuilder.CreateIndex(
            name: "IX_AbpOrganizationUnitRoles_RoleId_OrganizationUnitId",
            table: "AbpOrganizationUnitRoles",
            columns: new[] { "RoleId", "OrganizationUnitId" });

        migrationBuilder.CreateIndex(
            name: "IX_AbpOrganizationUnits_Code",
            table: "AbpOrganizationUnits",
            column: "Code");

        migrationBuilder.CreateIndex(
            name: "IX_AbpOrganizationUnits_ParentId",
            table: "AbpOrganizationUnits",
            column: "ParentId");

        migrationBuilder.CreateIndex(
            name: "IX_AbpPermissionGrants_Name_ProviderName_ProviderKey",
            table: "AbpPermissionGrants",
            columns: new[] { "Name", "ProviderName", "ProviderKey" });

        migrationBuilder.CreateIndex(
            name: "IX_AbpRoleClaims_RoleId",
            table: "AbpRoleClaims",
            column: "RoleId");

        migrationBuilder.CreateIndex(
            name: "IX_AbpRoles_NormalizedName",
            table: "AbpRoles",
            column: "NormalizedName");

        migrationBuilder.CreateIndex(
            name: "IX_AbpSecurityLogs_TenantId_Action",
            table: "AbpSecurityLogs",
            columns: new[] { "TenantId", "Action" });

        migrationBuilder.CreateIndex(
            name: "IX_AbpSecurityLogs_TenantId_ApplicationName",
            table: "AbpSecurityLogs",
            columns: new[] { "TenantId", "ApplicationName" });

        migrationBuilder.CreateIndex(
            name: "IX_AbpSecurityLogs_TenantId_Identity",
            table: "AbpSecurityLogs",
            columns: new[] { "TenantId", "Identity" });

        migrationBuilder.CreateIndex(
            name: "IX_AbpSecurityLogs_TenantId_UserId",
            table: "AbpSecurityLogs",
            columns: new[] { "TenantId", "UserId" });

        migrationBuilder.CreateIndex(
            name: "IX_AbpSettings_Name_ProviderName_ProviderKey",
            table: "AbpSettings",
            columns: new[] { "Name", "ProviderName", "ProviderKey" });

        migrationBuilder.CreateIndex(
            name: "IX_AbpUserClaims_UserId",
            table: "AbpUserClaims",
            column: "UserId");

        migrationBuilder.CreateIndex(
            name: "IX_AbpUserLogins_LoginProvider_ProviderKey",
            table: "AbpUserLogins",
            columns: new[] { "LoginProvider", "ProviderKey" });

        migrationBuilder.CreateIndex(
            name: "IX_AbpUserOrganizationUnits_UserId_OrganizationUnitId",
            table: "AbpUserOrganizationUnits",
            columns: new[] { "UserId", "OrganizationUnitId" });

        migrationBuilder.CreateIndex(
            name: "IX_AbpUserRoles_RoleId_UserId",
            table: "AbpUserRoles",
            columns: new[] { "RoleId", "UserId" });

        migrationBuilder.CreateIndex(
            name: "IX_AbpUsers_Email",
            table: "AbpUsers",
            column: "Email");

        migrationBuilder.CreateIndex(
            name: "IX_AbpUsers_NormalizedEmail",
            table: "AbpUsers",
            column: "NormalizedEmail");

        migrationBuilder.CreateIndex(
            name: "IX_AbpUsers_NormalizedUserName",
            table: "AbpUsers",
            column: "NormalizedUserName");

        migrationBuilder.CreateIndex(
            name: "IX_AbpUsers_UserName",
            table: "AbpUsers",
            column: "UserName");
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DropTable(
            name: "AbpClaimTypes");

        migrationBuilder.DropTable(
            name: "AbpLinkUsers");

        migrationBuilder.DropTable(
            name: "AbpOrganizationUnitRoles");

        migrationBuilder.DropTable(
            name: "AbpPermissionGrants");

        migrationBuilder.DropTable(
            name: "AbpRoleClaims");

        migrationBuilder.DropTable(
            name: "AbpSecurityLogs");

        migrationBuilder.DropTable(
            name: "AbpSettings");

        migrationBuilder.DropTable(
            name: "AbpUserClaims");

        migrationBuilder.DropTable(
            name: "AbpUserLogins");

        migrationBuilder.DropTable(
            name: "AbpUserOrganizationUnits");

        migrationBuilder.DropTable(
            name: "AbpUserRoles");

        migrationBuilder.DropTable(
            name: "AbpUserTokens");

        migrationBuilder.DropTable(
            name: "AbpOrganizationUnits");

        migrationBuilder.DropTable(
            name: "AbpRoles");

        migrationBuilder.DropTable(
            name: "AbpUsers");
    }
}
